package com.example.barnes.ummo.fragment; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import com.example.barnes.ummo.Main_Activity; import com.example.barnes.ummo.MyAdapter; import com.example.barnes.ummo.R; import com.example.barnes.ummo.db.Db; import com.example.barnes.ummo.holder.IconTreeItemHolder; import com.example.barnes.ummo.holder.MaterialLetterIconTreeItemHolder; import com.example.barnes.ummo.holder.ProfileHolder; import com.example.barnes.ummo.holder.SelectableHeaderHolder_2; import com.example.barnes.ummo.holder.SelectableItemHolder; import com.example.barnes.ummo.ummoAPI.QUser; import com.example.barnes.ummo.ummoAPI.QUserListner; import com.github.fabtransitionactivity.SheetLayout; import com.melnykov.fab.FloatingActionButton; import com.melnykov.fab.ObservableScrollView; import com.unnamed.b.atv.model.TreeNode; import com.unnamed.b.atv.view.AndroidTreeView; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import uk.co.chrisjenx.calligraphy.CalligraphyConfig; /** * Created by barnes on 8/6/15. */ public class SelectableTreeFragment extends BaseActivity implements SheetLayout.OnFabAnimationEndListener, QUserListner { //First We Declare Titles And Icons For Our Navigation Drawer List View //This Icons And Titles Are holded in an Array as you can see String TITLES[] = {"Home","Frequently Used Qs","Tokens","Request Uber","Map view"}; int ICONS[] = {R.drawable.ic_home,R.drawable.ic_frequency,R.drawable.ic_tokens,R.drawable.uber,R.drawable.ic_map}; //Similarly we Create a String Resource for the name and email in the header view //And we also create a int resource for profile picture in the header view int PROFILE = R.drawable.cole; private Toolbar toolbar; // Declaring the Toolbar Object RecyclerView mRecyclerView; // Declaring RecyclerView RecyclerView.Adapter mAdapter; // Declaring Adapter For Recycler View RecyclerView.LayoutManager mLayoutManager; // Declaring Layout Manager as a linear layout manager DrawerLayout Drawer; // Declaring DrawerLayout ActionBarDrawerToggle mDrawerToggle; @Bind(R.id.bottom_sheet) SheetLayout mSheetLayout; @Bind(R.id.fab) FloatingActionButton mFab; private AndroidTreeView tView; Db db; public List<String> qServiceTypeList = null; public List<String> qServiceProviderName = null; public List<String> qServiceName = null; public List<String> qsJoined = null; //ActionButton actionButton; Context c; private SwipeRefreshLayout swipeRefreshLayout; private static final int REQUEST_CODE = 1; Activity activity; private QUser user; private vQ selectedQ; private String categoriesJSON; private String qsJSON; private String qJSON; private String joinedQsJSON; private String serviceProvidersJSON; //Some setters and getters for qs public void setSelectedQ(vQ vq) { selectedQ=vq; } public String getJoinedQsJSON() { return joinedQsJSON; } public void joinSelectedQ() { user.joinQ(selectedQ.getCellNumb()); } public void setQinfoDialog(SelectableItemHolder info) { selectedQ.setInfo(info); } public vQ getSelectedQ() { return selectedQ; } public void setSelectedQ(String cell) { selectedQ = new vQ(); selectedQ.setCellNumb(cell); } public void setSelectedQ(JSONObject obj) { selectedQ = new vQ(); selectedQ.setFromJSON(obj); } //end setters and getters for qs public QUser getUser(){return user;} //Overriding for QUserListener Begins Here //sucess Handlers @Override public void gotJoinedQs(String string) { Log.d("JoinedQs",string); } @Override public void qReady(String string) { qJSON=string; Log.d("QDATA",string); try { JSONObject object = new JSONObject(qJSON); selectedQ.getInfo().dialog(qJSON); } catch (JSONException jse) { Log.d("Error",jse.toString()); } } @Override public void qError(String err) { } public String getCategoriesJSON() { return categoriesJSON; } public String getQsJSON() { return qsJSON; } public String getServiceProvidersJSON() { return serviceProvidersJSON; } public final static String FRAGMENT_PARAM = "fragment"; @Override public void userRegistered(String string) { } @Override public void qJoined(String string) { } @Override public void qLeft(String string) { } /*@Override public void updated(String string, String position) { }*/ @Override public void updated(String string) { Log.d("joinedQs",string); try { //JSONObject object = new JSONObject(string); JSONArray JSONqs = new JSONArray(string); joinedQsJSON = JSONqs.toString(); if(JSONqs.length() > 0) { Intent i = new Intent(); i.putExtra("joinedQs",joinedQsJSON); //i.putExtra("qpos"); i.setClass(this, Main_Activity.class); this.startActivity(i); } } catch (JSONException jse) { Log.e("JoinedQs",jse.toString()); } } @Override public void categoriesReady(String string) { categoriesJSON = string; /* Bundle b = getIntent().getExtras(); Class<?> fragmentClass = (Class<?>) b.get(FRAGMENT_PARAM); Fragment f = (Fragment)(new SelectableTreeFragment());//Fragment.instantiate(this, SelectableTreeFragment.class); f.setArguments(b); getFragmentManager().beginTransaction().replace(R.id.fragment, f, fragmentClass.getName()).commit(); // user.makeNotification(); //Intent i = new Intent(SingleFragmentActivity.this, SelectableTreeFragment.class); //i.putExtra("message", b); //startActivity(i);*/ } @Override public void allQsReady(String string) { qsJSON = string; Log.d("qs",string); } //Error Handlers @Override public void joinedQsError(String err) { } @Override public void userRegistrationError(String err) { } @Override public void qJoinedError(String err) { } @Override public void qLeftError(String err) { } @Override public void updateError(String err) { } @Override public void categoriesError(String err) { } @Override public void allQError(String err) { } //End Overriding for QUserListener @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_selectable_nodes); user = new QUser(this); if(user==null) { Log.e("USER","User Is Null"); } else { Log.e("USER:",user.getName()); } String NAME = user.getName(); String EMAIL = "+268 "+user.getCellNumb(); /* Assinging the toolbar object ot the view and setting the the Action bar to our toolbar */ toolbar = (Toolbar) findViewById(R.id.tool_bar); setSupportActionBar(toolbar); mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView); // Assigning the RecyclerView Object to the xml View mRecyclerView.setHasFixedSize(true); //int width = getResources().getDisplayMetrics().widthPixels/2;// Letting the system know that the list objects are of fixed size mAdapter = new MyAdapter(TITLES,ICONS,NAME,EMAIL,PROFILE,this); // Creating the Adapter of MyAdapter class(which we are going to see in a bit) // And passing the titles,icons,header view name, header view email, // and header view profile picture mRecyclerView.setAdapter(mAdapter); // Setting the adapter to RecyclerView mLayoutManager = new LinearLayoutManager(this); // Creating a layout Manager mRecyclerView.setLayoutManager(mLayoutManager); // Setting the layout Manager Drawer = (DrawerLayout) findViewById(R.id.DrawerLayout); // Drawer object Assigned to the view mDrawerToggle = new ActionBarDrawerToggle(this,Drawer,toolbar,R.string.openDrawer,R.string.closeDrawer) { @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); // code here will execute once the drawer is opened( As I dont want anything happened whe drawer is // open I am not going to put anything here) } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); // Code here will execute once drawer is closed } }; // Drawer Toggle Object Made Drawer.setDrawerListener(mDrawerToggle); // Drawer Listener set to the Drawer toggle mDrawerToggle.syncState(); // Finally we set the drawer toggle sync State int width = getResources().getDisplayMetrics().widthPixels - 100; DrawerLayout.LayoutParams params = (android.support.v4.widget.DrawerLayout.LayoutParams) mRecyclerView.getLayoutParams(); params.width = width; mRecyclerView.setLayoutParams(params); //final View rootView = inflater.inflate(R.layout.fragment_selectable_nodes, null, false); final ViewGroup containerView = (ViewGroup) findViewById(R.id.container); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath("fonts/Ubuntu-C.ttf") .setFontAttrId(R.attr.fontPath) .build() ); ButterKnife.bind(this); //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); //toolbar.setTitle("mmo"); //toolbar.setLogo(R.mipmap.ummo_logo); //setUpToolbarWithTitle("Ummo", false); //setUpToolbarWithTitle(getString(R.string.app_name), false); //setActionBar(); //getSupportActionBar().setIcon(R.mipmap.ummo_logo); //mFab = (com.melnykov.fab.FloatingActionButton) findViewById(R.id.fab); mSheetLayout.setFab(mFab); mFab.setImageResource(R.drawable.fab_plus_icon); mSheetLayout.setFabAnimationEndListener(this); //mSheetLayout.setFab(mFab); swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefCategory); //swipeRefreshLayout.setOnRefreshListener(this.); swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { } }); activity = this; Intent intent = getIntent(); containerView.removeAllViews(); String mess = intent.getStringExtra("categoriesJSON"); //Log.e("Greeting",mess); c = SelectableTreeFragment.this; TreeNode root = TreeNode.root(); ObservableScrollView scrollView = (ObservableScrollView) findViewById(R.id.scroll_view); RelativeLayout list = (RelativeLayout) findViewById(R.id.container); mFab.attachToScrollView(scrollView); String string = mess; try { ArrayList<TreeNode> treeNodeList = new ArrayList<>(); ArrayList<TreeNode> treeNodeList2 = new ArrayList<>(); ArrayList<JSONObject> serviceNameColl = new ArrayList<>(); JSONArray array= new JSONArray(string); qServiceTypeList = new ArrayList<String>(); for (int i =0; i<array.length();i++) { JSONObject object = array.getJSONObject(i); String categoryName = object.getString("name"); qServiceTypeList.add(categoryName); if (categoryName.equals("Governmental")) { treeNodeList.add(new TreeNode(new IconTreeItemHolder.IconTreeItem(categoryName,R.string.fa_globe)).setViewHolder(new ProfileHolder(activity))); } else if(categoryName.equals("Financial")) { treeNodeList.add(new TreeNode(new IconTreeItemHolder.IconTreeItem(categoryName,R.string.fa_credit_card)).setViewHolder(new ProfileHolder(activity))); } else if(categoryName.equals("Entertainment")) { treeNodeList.add(new TreeNode(new IconTreeItemHolder.IconTreeItem(categoryName,R.string.fa_music)).setViewHolder(new ProfileHolder(activity))); } else if(categoryName.equals("Medical")) { treeNodeList.add(new TreeNode(new IconTreeItemHolder.IconTreeItem(categoryName,R.string.fa_stethoscope)).setViewHolder(new ProfileHolder(activity))); } else if(categoryName.equals("Miscellaneous")) { treeNodeList.add(new TreeNode(new IconTreeItemHolder.IconTreeItem(categoryName,R.string.fa_sort_alpha_desc)).setViewHolder(new ProfileHolder(activity))); } else { treeNodeList.add(new TreeNode(new IconTreeItemHolder.IconTreeItem(categoryName, R.string.ic_sd_storage)).setViewHolder(new ProfileHolder(activity))); } if (object.has("Providers")) { JSONArray providers = object.getJSONArray("Providers"); for (int j = 0; j < providers.length(); j++) { //Setting the Service Categories JSONObject providerObj = providers.getJSONObject(j); Log.d("object",providerObj.toString()); treeNodeList2.add(new TreeNode(new MaterialLetterIconTreeItemHolder.IconTreeItem(providerObj.getString("name"))).setViewHolder(new SelectableHeaderHolder_2(activity))); treeNodeList.get(i).addChildren(treeNodeList2.get(j)); /* getServicePID = db.getQServicePid(qServiceProviderName.get(j)); string_serviceProviderid = getServicePID.get(0); int_serviceProviderid = Integer.parseInt(string_serviceProviderid); qServiceName = db.getQServiceName(int_serviceProviderid); */ if (providerObj.has("Services")) { JSONArray services = providerObj.getJSONArray("Services"); for (int k = 0; k < services.length(); k++) { serviceNameColl.add(services.getJSONObject(k)); } customfillFolder(treeNodeList2.get(j), serviceNameColl, "qServiceProviderName.get(i)"); } } } serviceNameColl.clear(); treeNodeList2.clear(); } Log.d("List",array.toString()); root.addChildren(treeNodeList); } catch (JSONException jse) { Log.e("JSON Error",jse.toString()); } //actionButton = (ActionButton) rootView.findViewById(R.id.action_button); //actionButton.setImageResource(R.drawable.fab_plus_icon); //actionButton.setButtonColor(getResources().getColor(R.color.fab_material_light_blue_500)); //actionButton.hide(); db = new Db(SelectableTreeFragment.this); db.open(); qsJoined = db.getQsJoined(); /*actionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ((SingleFragmentActivity) getActivity()).getUser().updateJoinedQs(); if (qsJoined.size() > 0) { } else { Toast.makeText(c, "You have not joined any ques yet", Toast.LENGTH_SHORT).show(); } } });*/ // = db.getAllQServiceTypesName(); //int qServicesTypeSize = qServiceTypeList.size(); int int_servicetypeid; String string_servicetypeid; int int_serviceProviderid; String string_serviceProviderid; List<String> getServiceTId; List<String> getServicePID; //for (int i = 0;i < qServicesTypeSize;i++) //{ /*if (qServiceTypeList.get(i) == "Financial Services_") { treeNodeList.add(new TreeNode(new IconTreeItemHolder.IconTreeItem(qServiceTypeList.get(i).toString(),R.drawable.currency9)).setViewHolder(new ProfileHolder(getActivity()))); } else { treeNodeList.add(new TreeNode(new IconTreeItemHolder.IconTreeItem(qServiceTypeList.get(i).toString(),R.string.ic_sd_storage)).setViewHolder(new ProfileHolder(getActivity()))); } //string_servicetypeid = getServiceTId.get(0);//id for displayed q service type //int_servicetypeid = Integer.parseInt(string_servicetypeid); //qServiceProviderName = db.getQServiceProviderName(int_servicetypeid); */ //} tView = new AndroidTreeView(SelectableTreeFragment.this, root); tView.setDefaultAnimation(true); containerView.addView(tView.getView()); if (savedInstanceState != null) { String state = savedInstanceState.getString("tState"); if (!TextUtils.isEmpty(state)) { tView.restoreState(state); } } tView.setSelectionModeEnabled(true); } //activity.registerReceiver(broadcastReceiver, new IntentFilter("com.example.barnes.ummo.CATEGORIES")); //return rootView; private void customfillFolder(TreeNode folder, ArrayList<JSONObject> list, String serviceName) { List<String> qJoinedList = null; //qJoinedList = db.getQName(serviceName); try { if (true) { for (int i = 0; i < list.size(); i++) { folder.addChildren(new TreeNode(list.get(i).getString("name")).setViewHolder(new SelectableItemHolder(activity, list.get(i), "serviceName"))); } } else { for (int i = 0; i < list.size(); i++) { folder.addChildren(new TreeNode(list.get(i)).setViewHolder(new SelectableItemHolder(activity, list.get(i), "serviceName"))); } } } catch(JSONException jse) { Log.e("Json Error Passing Qs",jse.toString()); } } @OnClick(R.id.fab) void onFabClick() { mSheetLayout.expandFab(); } @Override public void onFabAnimationEnd() { Intent intent = new Intent(this, Main_Activity.class); startActivityForResult(intent, REQUEST_CODE); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE) { mSheetLayout.contractFab(); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("tState", tView.getSaveState()); } @Override protected void onResume() { super.onResume(); LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("com.example.barnes.ummo.CATEGORIES")); } private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Extract data included in the Intent String message = intent.getStringExtra("message"); Log.e("receiver", "Got message: " + message); } }; } class vQ{ private String cellNumb; private SelectableItemHolder info; private String qLocation; private int qlength; private int ttdqMin; private int ttdqSec; public void setInfo(SelectableItemHolder info1){ info=info1; } public SelectableItemHolder getInfo(){ return info; } public vQ() { } public void calculateStats() { } public String getCellNumb(){ return cellNumb; } public void setFromJSON(JSONObject vq){ Log.e("cellNumber",cellNumb); info.dialog(vq.toString()); } public void setCellNumb(String cellNumb1){ cellNumb = cellNumb1; } }